#include "./../inc/draw.h"

FILE * fp_lcd        = NULL;
FILE * fp_touch      = NULL;
int (*lcd_mmap)[800] = NULL;
int last_x = -1, last_y = -1;
extern is_touching = 0; // 是否触摸

void draw_init()
{
    Init();
    toolbar_init();
}

int Init()
{
    srand(time(NULL));

    fp_touch = fopen("/dev/input/event0", "r");
    if(fp_touch == NULL) {
        perror("touch_fopen");
        return -1;
    }
    // printf("open touch success\n");

    fp_lcd = fopen("/dev/fb0", "r+");
    if(fp_lcd == NULL) {
        perror("lcd_fopen");
        return -1;
    }
    // printf("open lcd success\n");

    // 从FILE指针获取文件描述符
    int fd_lcd = fileno(fp_lcd);
    if(fd_lcd < 0) {
        perror("fileno");
        return -1;
    }

    lcd_mmap = mmap(NULL, 800 * 480 * 4, PROT_READ | PROT_WRITE, MAP_SHARED, fd_lcd, 0);

    // printf("mmap success\n");
    memset(lcd_mmap, 0, 800 * 480 * 4);
    return 1;
}

void free_Init()
{
    munmap(lcd_mmap, 800 * 480 * 4);

    fclose(fp_lcd);
    fclose(fp_touch);
}

// 开始监听触摸屏事件
void detect_init()
{
    int color  = WHITE;
    int radius = 5;
    // 读取触摸屏数据
    struct input_event buf;
    int x = -1, y = -1;

    while(1) {

        memset(&buf, 0, sizeof(buf));
        fread(&buf, sizeof(buf), 1, fp_touch);

        if(buf.type == EV_ABS) {
            if(buf.code == ABS_X) {
                x = buf.value * 800 / 1024;
            } else if(buf.code == ABS_Y) {
                y = buf.value * 480 / 600;
            }
        }

        if(buf.type == EV_SYN) {
            if(x != -1 && y != -1) {
                if(y <= 48) {
                    if(x > 5 && x < 45) {
                        // 画笔工具
                        color = WHITE;
                    } else if(x > 55 && x < 95) {
                        // 橡皮工具
                        color = BLACK;
                    } else if(x > 155 && x < 195) {
                        // 半径5的圆（黑色）
                        radius = 5;
                    } else if(x > 205 && x < 245) {
                        // 半径10的圆（黑色）
                        radius = 10;
                    } else if(x > 255 && x < 295) {
                        // 半径15的圆（黑色）
                        radius = 15;
                    } else if(x > 305 && x < 345) {
                        // 半径20的圆（黑色）
                        radius = 20;
                    } else if(x > 355 && x < 405) {
                        // 黄色方块
                        color = YELLOW;
                    } else if(x > 405 && x < 455) {
                        // 红色方块
                        color = RED;
                    } else if(x > 455 && x < 505) {
                        // 绿色方块
                        color = GREEN;
                    } else if(x > 505 && x < 555) {
                        // 蓝色方块
                        color = BLUE;
                    } else if(x > 555 && x < 605) {
                        memset(lcd_mmap, 0, 800 * 480 * 4);
                        toolbar_init();
                    } else if(x > 750 && x < 800) {
                        free_Init();
                        return;
                    }
                    touch_release(); // 工具栏点击后重置触摸状态
                } else {
                    if(is_touching) {
                        // 持续触摸，绘制连线
                        touch(x, y, radius, color);
                    } else {
                        // 新开始触摸，只画点
                        draw_circle_fast(x, y, radius, color);
                        last_x      = x;
                        last_y      = y;
                        is_touching = 1;
                    }
                }
            }
        } else if(buf.type == EV_KEY && buf.code == BTN_TOUCH) {
            if(buf.value == 0) {
                // 触摸释放
                touch_release();
            } else if(buf.value == 1) {
                // 触摸按下（开始新的触摸序列）
                is_touching = 1;
                last_x      = -1; // 强制重新开始
                last_y      = -1;
            }
        }
    }
}
